//  智能指针auto_ptr、shared_ptr、unique_ptr的使用
#include <iostream>
#include <memory>
using namespace std;

class A
{
    int size;
    char *p;
public:
    A(int s=1):size(s){cout<<"构造"<<endl;p=new char[s];}
    ~A(){cout<<"析构"<<endl;delete [] p;}

    //重新设定堆内存大小
    void resize(int newSize)
    {
        size = newSize;
        delete [] p;
        p = new char[size];
    }

    //获取相关信息
    void info(void){cout<< size << endl;}
};

int main(int argc, char const *argv[])
{
    // A *p = new A;
    // p->info();

    // auto_ptr<A> ap(new A);
    // ap->info();

    // delete p;

    // shared_ptr<A> sp1(new A(20));

    // shared_ptr<A> sp2(sp1);
    // sp1->info();
    // sp2->info();

    // shared_ptr<A> sp3;
    // sp3 = sp1;
    // sp1->info();
    // sp2->info();
    // sp3->info();

    // sp1->resize(100);
    // sp1->info();
    // sp2->info();
    // sp3->info();

    unique_ptr<A> up(new A(20));    //只能有一个该指针来管理对象，不允许拷贝和赋值
    up->info();

    return 0;
}
